package com.soft.javase.ch02.test05;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
 * @author wangzhisen
 * @Desc TODO
 * @date 2025/4/18
 *
 * 1、定义一个英雄类Hero，可以通过这个类创建英雄角色
 * 属性：
 *     游戏角色拥有昵称name，等级level，血量blood，攻击力power，防御力defence，种族kind，
 * 装备Equip（只能装3个装备，初始没有装备）。
 * 方法：
 *     游戏角色拥有基本攻击方法（拥有一定几率打出暴击）attack(Monster m)，
 *     死亡判定方法isDead()，添加装备的方法addEquip(Equip e)，获取角色信息的方法show()。
 */
public class Hero {

    // 成员属性
    private String name;
    private int level;
    private int blood;
    private String kind;
    private int power;
    private int defence;

    //一对多 关联装备,只能装3个装备，初始没有装备
    private Equip[] equips = new Equip[3];  //[null,null,null]
    //统计当前装备数量
    private int index;

    // 成员方法

    /**
     * 游戏角色拥有基本攻击方法（拥有一定几率打出暴击）
     * @param m  怪兽  依赖关系
     */
    public void attack(Monster m){
        //产生1~100的随机值  [0.0,1.0) -> [0.0,100.0) -> [1.0,100.0] -> [1,100]
        int random = (int)(Math.random()*100+1);
        int block = 0;
        //产生暴击
        if(random>=70){
            block=random*2;
        }

        //计算失血量
        int blood = (this.power+block) - m.getDefence();
        if(blood>0){
            //设置怪兽的血量
            m.setBlood(m.getBlood() - blood);
            System.out.println("此回合怪兽的失血量："+blood+" , 剩余血量："+m.getBlood());
        }else{
            System.out.println("此回合攻击无效");
        }

    }

    /**
     * 死亡判定方法
     * @return  返回true代表死亡，返回false代表或者
     */
    public boolean isDead(){
        if(this.blood<=0){
            return true;
        }
        return false;
    }

    /**
     * 添加装备的方法
     * @param e  装备信息
     */
    public void addEquip(Equip e){
        if(index>=equips.length){
            System.out.println("装备已满~");
            return;
        }
        //添加装备
        equips[index++] = e;
        //合并防御力
        this.defence+=e.getDefence();
        //合并攻击力
        this.power+=e.getPower();
    }


    //获取英雄角色信息的方法
    public void show(){
        System.out.println("英雄的名称："+name);
        System.out.println("英雄的等级："+level);
        System.out.println("英雄的血量："+blood);
        System.out.println("英雄的种类："+kind);
        System.out.println("英雄的攻击力："+power);
        System.out.println("英雄的防御力："+defence);

        System.out.println("--------- 英雄持有的装备信息 ----------");
        for (int i = 0; i < index; i++) {
            System.out.println("----- 第"+(i+1)+"个装备 -----");
            equips[i].show();
        }
    }

    public Hero() {
    }

    public Hero(String name, int level, int blood, String kind, int power, int defence) {
        this.name = name;
        this.level = level;
        this.blood = blood;
        this.kind = kind;
        this.power = power;
        this.defence = defence;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return level
     */
    public int getLevel() {
        return level;
    }

    /**
     * 设置
     * @param level
     */
    public void setLevel(int level) {
        this.level = level;
    }

    /**
     * 获取
     * @return blood
     */
    public int getBlood() {
        return blood;
    }

    /**
     * 设置
     * @param blood
     */
    public void setBlood(int blood) {
        this.blood = blood;
    }

    /**
     * 获取
     * @return kind
     */
    public String getKind() {
        return kind;
    }

    /**
     * 设置
     * @param kind
     */
    public void setKind(String kind) {
        this.kind = kind;
    }

    /**
     * 获取
     * @return power
     */
    public int getPower() {
        return power;
    }

    /**
     * 设置
     * @param power
     */
    public void setPower(int power) {
        this.power = power;
    }

    /**
     * 获取
     * @return defence
     */
    public int getDefence() {
        return defence;
    }

    /**
     * 设置
     * @param defence
     */
    public void setDefence(int defence) {
        this.defence = defence;
    }


    public String toString() {
        return "Hero{name = " + name + ", level = " + level + ", blood = " + blood + ", kind = " + kind + ", power = " + power + ", defence = " + defence + "}";
    }

}
